package com.ruoyi.common.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.stereotype.Component;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Properties;

/**
 * 邮件发送工具类
 * 所需pom架包配置下载地址：https://mvnrepository.com/artifact/javax.mail/mail
 */
public class SendMailUtil {

    /**
     * 邮件发送的方法
     *
     * @param to 收件人,多个以英文逗号分割
     * @param subject 主题
     * @param content 内容
     * @param smtp 协议
     * @param host 发送服务器服务器
     * @param sendName 邮件发送人
     * @param sendPort 邮件发送人端口
     * @param userName 邮件发送人名
     * @param userPwd 邮件发送人密码  （POP3/SMTP服务授权码）
     * @return 成功或失败
     */
    public static boolean send(String to, String subject, String content, String smtp, String host,
                               String sendName, String sendPort, String userName, String userPwd) {
        System.out.println("接收人："+to);
        System.out.println("主题："+subject);
        System.out.println("内容："+content);
        System.out.println("协议："+smtp);
        System.out.println("发送服务器服务器："+host);
        System.out.println("邮件发送人："+sendName);
        System.out.println("邮件发送人端口："+sendPort);
        System.out.println("邮件发送人名："+userName);
        System.out.println("邮件发送人密码："+userPwd);


        // 第一步：创建Session
        Properties props = new Properties();
        // 指定邮件的传输协议，smtp(Simple Mail Transfer Protocol 简单的邮件传输协议)
        props.put("mail.transport.protocol", smtp);
        // 指定邮件发送服务器服务器 "smtp.qq.com"
        props.put("mail.host", host);
        // 指定邮件的发送人(您用来发送邮件的服务器，比如您的163\sina等邮箱)
        props.put("mail.from", sendName);

        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.put("mail.smtp.socketFactory.port", sendPort);


        Session session = Session.getDefaultInstance(props);

        // 开启调试模式
        session.setDebug(true);
        try {
            // 第二步：获取邮件发送对象
            Transport transport = session.getTransport();
            // 连接邮件服务器，链接您的163、sina邮箱，用户名（不带@163.com，登录邮箱的邮箱账号，不是邮箱地址）、密码
            transport.connect(userName, userPwd);

            // 第三步：创建邮件消息体
            MimeMessage message = new MimeMessage(session);
            //设置自定义发件人昵称
            String nick="";
            try {
                nick=javax.mail.internet.MimeUtility.encodeText("我的昵称");
            } catch (Exception e) {
                e.printStackTrace();
            }
            message.setFrom(new InternetAddress(nick+" <"+sendName+">"));

            // 邮件的主题
            message.setSubject(subject);
            //收件人
            String[] toArr = to.split(",");
            for (String e : toArr) {
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(e));
            }

            // 邮件的内容
            message.setContent(content, "text/html;charset=utf-8");
            // 邮件发送时间
            message.setSentDate(new Date());

            // 第四步：发送邮件
            // 第一个参数：邮件的消息体
            // 第二个参数：邮件的接收人，多个接收人用逗号隔开（test1@163.com,test2@sina.com）
            transport.sendMessage(message, InternetAddress.parse(to));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) {

        String totalSpaceMsg = "总空间：492G";
        String freeSpaceMsg = "已用空间：434G";
        String usedSpaceMsg = "可用空间：39G";
        double usagePercentage = 92.5;
        String allMsg = "磁盘空间使用率过高: <br>" + totalSpaceMsg + "<br>" + freeSpaceMsg + "<br>" + usedSpaceMsg + "<br>" + "当前使用率为：" + new DecimalFormat("#.##").format(usagePercentage) + "%，请及时清理磁盘空间！";


        String recipients = "3270255537@qq.com,1308077484@qq.com";
        // 发送邮件提醒
        SendMailUtil.send(recipients,
                "磁盘空间使用率过高",
                allMsg,
                "smtp",
                "smtp.qq.com",
                "3270255537@qq.com",
                "25", "3270255537",
                "jxidgowysjhfdbbd");
    }
}